class "se_actor" (cse_alife_creature_actor) -------------------- function se_actor:__init (section) super (section) self.m_registred = false self.start_position_filled = false end function se_actor:on_register() cse_alife_creature_actor.on_register(self) simulation_objects.register(self) SendScriptCallback("server_entity_on_register",self,"se_actor") self.m_registred = true if not self.start_position_filled then SIMBOARD:fill_start_position() self.start_position_filled = true end end function se_actor:on_unregister() SendScriptCallback("server_entity_on_unregister",self,"se_actor") simulation_objects.unregister(self) cse_alife_creature_actor.on_unregister(self) end -------------------- function se_actor:STATE_Write(packet) --utils_data.debug_write(strformat("%s STATE_Write",self:name())) -- Alundaio SendScriptCallback("se_actor_on_STATE_Write",self) --Alundaio cse_alife_creature_actor.STATE_Write(self, packet) set_save_marker(packet, "save", false, "se_actor") packet:w_bool(self.start_position_filled) set_save_marker(packet, "save", true, "se_actor") end -------------------- function se_actor:STATE_Read(packet, size) -- Alundaio SendScriptCallback("se_actor_on_STATE_Read",self) -- Alundaio cse_alife_creature_actor.STATE_Read(self, packet, size) if editor() or packet:r_eof() then return end if db.actor == nil then set_save_marker(packet, "load", false, "se_actor") self.start_position_filled = packet:r_bool() set_save_marker(packet, "load", true, "se_actor") end end --*********************************************************************************************** --* SIMULATION_TARGET_ACTOR * --*********************************************************************************************** -- Получить позицию, левел вертекс, гейм вертекс обьекта. function se_actor:get_location() return self.position, self.m_level_vertex_id, self.m_game_vertex_id end -- Достигнут ли я отрядом выбравшим меня как цель. function se_actor:am_i_reached(squad) return false end -- Вызывается 1 раз после достижения меня отрядом выбравшим меня как цель. function se_actor:on_after_reach(squad) --squad.current_target_id = squad.smart_id end -- Вызывается 1 раз в момент выбора меня как цели. function se_actor:on_reach_target(squad) squad:set_location_types() for k in squad:squad_members() do if db.offline_objects[k.id] ~= nil then empty_table(db.offline_objects[k.id]) --db.offline_objects[k.id] = {} end db.spawned_vertex_by_id[k.id] = nil end SIMBOARD:assign_squad_to_smart(squad, nil) end -- Возвращает CALifeSmartTerrainTask на меня, вызывается из smart_terrain:task() function se_actor:get_alife_task() --printf("Returning alife task for object [%s] game_vertex [%s] level_vertex [%s] position %s", self.id, self.m_game_vertex_id, self.m_level_vertex_id, vec_to_str(self.position)) return CALifeSmartTerrainTask(db.storage[0] and db.storage[0].loud_gvid or self.m_game_vertex_id, db.storage[0] and db.storage[0].loud_lvid or self.m_level_vertex_id) end function se_actor:sim_available() -- Проверить не находится ли игрок ближе чем 50 метров к смарту закрытому для симуляции. if (smart_terrain.nearest_to_actor_smart.dist < 50 and simulation_objects.available_by_id[smart_terrain.nearest_to_actor_smart.id] ~= true) then return false end return true end -- Мой прекондишн. function se_actor:target_precondition(squad) if (IsSurvivalMode()) then return true end return false end -- Посчитать мой приоритет для отряда. function se_actor:evaluate_prior(squad) return simulation_objects.evaluate_prior(self, squad) end